<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>

<body>
  <!-- 手写 isEqual -->
  <!-- 用来比较两个引用类型的数据是否相等 -->

  <script>
    // 判断是否是对象或数组
    function isObject(obj) {
      return typeof obj === 'object' && obj !== null;
    }
    function isEqual(obj1, obj2) {
      if (!isObject(obj1) || !isObject(obj2)) {
        // 说明obj1不是引用类型
        // obj1和obj2是一个值类型，参与比较的一般不会是函数
        return obj1 === obj2
      }
      if (obj1 === obj2) {
        return true;
      }
      // 两个数据是对象或数组，而且不是同一个
      // 比较两个引用数据类型的元素个数或属性个数是否一样
      let obj1Keys = Object.keys(obj1)
      let obj2Keys = Object.keys(obj2)
      // console.log(obj1Keys,obj2Keys);
      if (obj1Keys.length !== obj2Keys.length) {
        return false;
      }

      // 以obj1为基准，和obj2一次递归比较
      for (let key in obj1) {
        // console.log(obj1[key]);
        const res = isEqual(obj1[key], obj2[key])
        if (!res) {
          return false;
        }
      }

      return true;
    }

    let obj1 = { a: 1, b: { x: 2, y: 3 } }
    let obj2 = { a: 1, b: { x: 3, y: 3 } }
    // == === 比较的是地址
    // console.log(obj1 === obj2);
    console.log(isEqual(obj1, obj2));
    // console.log(isEqual(obj1, obj1));
    // console.log(isEqual(111, 'hello'));

    // let arr1 = [1,2];
    // let arr2 = [1,2,3]
  </script>

</body>

</html>